/**
 * HuffmanAssociation.java
 * Descripción: Representa una asociación que sirve para construir un árbol de
 *              Huffman, la cual contiene una cadena y la frecuencia con que
 *              los caracteres que la conforman aparecen.
 * Inspirado en la clase Association del libro JavaStructures de Duane Bailey, 2007 (C).
 * @author Oscar Castañeda 11086
 * @since 11/09/2012
 * @version 1.1
 */

public class HuffmanAssociation {
    
    private String key;    //Cadena que identifica los caracteres relacionados a esta asociación.
    private int frequency; //Frecuencia con que aparecen los caracteres de esta asociación.
    
    /**
     * Permite crear una nueva HuffmanAssociation, con la llave indicada como parámetro
     * y una frecuencia de 1.
     * @param key String que servirá de identificador único de esta HuffmanAssociation.
     */
    public HuffmanAssociation(String key){
        this.key = key;
        frequency = 1;
    }
    
    /**
     * Permite crear una nueva HuffmanAssociation, con la llave y frecuencia indicadas.
     * @param key String con la llave que debe ser única a este HuffmanAssociation.
     * @param frequency Frecuencia correspondiente a las letras que contiene la llave.
     */
    public HuffmanAssociation(String key, int frequency){
        this.key = key;
        this.frequency = frequency;
    }
    
    /**
     * Devuelve el conjunto de caracteres que son representados por esta asociación.
     * @return String que contiene a los caracteres.
     */
    public String getKey(){
        return key;
    }
    
    /**
     * Devuelve la frecuencia con que aparecen los caracteres representados por esta asociación.
     * @return int
     */
    public int getFrequency(){
        return frequency;
    }
    
    /**
     * Modifica la frecuencia con que aparecen los caracteres representados por esta asociación.
     * @param newValue int con la nueva frecuencia.
     */
    public void setFrequency(int newValue){
        frequency = newValue;
    }
    
    /**
     * Determina si esta HuffmanAssociation es igual a la otra, si sus keys son iguales.
     * @param other Otra HuffmanAssociation con la cual se realiza la comparación.
     * @return boolean true si son iguales; false en caso contrario. Si no se compara con otra HuffmanAssociation, habrá error.
     */
    @Override
    public boolean equals(Object other){
        HuffmanAssociation otherAssociation = (HuffmanAssociation) other;
        return (key.equals(otherAssociation.getKey()));
    }

    /**
     * Incrementa en uno la frecuencia de esta asociación.
     */
    public void incrementFrequency() {
        frequency ++;
    }
    
}
